/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qp.smsmarketing.dao;

import com.qp.smsmarketing.dao.abstractdao.AbstractDAO;
import com.qp.smsmarketing.dao.abstractdao.Hib;
import com.qp.smsmarketing.entity.Contato;
import java.util.List;

/**
 *
 * @author waldenilson
 */
public class ContatoDAO extends AbstractDAO {

    public ContatoDAO() {
        super.entityManager = Hib.getSessionFactory();
    }

    public List buscarTodos() {
        return findAllRows("Contato");
    }

    public Object buscarRegistro(int id) {
        return findOne("Contato", id);
    }
    
    public List buscarTodosAtivo() {
        return findAllRowsActive("Contato");
    }

    public boolean salvarObj(Object o) {
        return salvar(o);
    }

    public boolean atualizarDados(Object o) {
        return atualizar(o);
    }

    public boolean deletarContatos() {
        entityManager.getTransaction().begin();
        String sqlDelete = "DELETE FROM Contato";
        if (deletarGrupoContato()) {
            try {
                entityManager.createQuery(sqlDelete).executeUpdate();
                entityManager.getTransaction().commit();
                return true;
            } catch (Exception e) {
                System.out.println(e);
                return false;
            }
        } else {
            return false;
        }
    }

    public boolean deletarGrupoContato() {
        String sql = "DELETE FROM GrupoContato gc";
        try {
            entityManager.createQuery(sql).executeUpdate();
            //entityManager.getTransaction().commit();
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }

    public boolean deletarGruposContatosByContato(int idContato) {
        entityManager.getTransaction().begin();
        String sqlDelete = "DELETE FROM GrupoContato where contato_grupo_contato = " + idContato;

        try {
            entityManager.createQuery(sqlDelete).executeUpdate();
            entityManager.getTransaction().commit();
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }

    public List filtrarContatosPorNome(String valor) {
        List<Contato> lista = null;
        String sql = "SELECT contato FROM Contato contato WHERE nomeContato LIKE:nome";

        lista = entityManager.createQuery(sql).setParameter("nome", "%" + valor + "%").getResultList();

        return lista;
    }

    public List<Contato> filtrarContatosPorCelular(String celular) {
        List<Contato> lista = null;
        String sql = "SELECT contato FROM Contato contato WHERE smsContato LIKE:celular";

        lista = entityManager.createQuery(sql).setParameter("celular", "%" + celular + "%").getResultList();

        return lista;
    }

    public List<Contato> filtrarContatosPorAniversario(String data) {
        List<Contato> lista = null;
        String sql = "SELECT contato FROM Contato contato WHERE dataaniContato LIKE:data";

        lista = entityManager.createQuery(sql).setParameter("data", "%" + data + "%").getResultList();

        return lista;
    }

    public List<Contato> filtrarContatosPorGrupo(String nomeGrupo) {
        List<Contato> lista = null;
        String sql = "SELECT contato FROM Contato contato, GrupoContato gc, Grupo g WHERE contato.idContato = gc.contatoGrupoContato AND gc.grupoGrupoContato=g.idGrupo AND g.nomeGrupo LIKE :nomeGrupo";

        lista = entityManager.createQuery(sql).setParameter("nomeGrupo", "%" + nomeGrupo + "%").getResultList();

        return lista;
    }
}
